#include <iostream>
#include <vector>
#include <queue>

using namespace std;

struct TreeNode {
	int val;
	struct TreeNode *left;
	struct TreeNode *right;
	TreeNode(int x) :
		val(x), left(NULL), right(NULL) {
	}
};


vector<int> PrintFromTopToBottom(TreeNode* root) {
	vector<int> printSeq;
	if (root == NULL) return printSeq;
	queue<TreeNode*> q;
	q.push(root);
	while (!q.empty())
	{
		TreeNode* node = q.front();
		printSeq.push_back(node->val);
		if (node->left != NULL)
			q.push(node->left);
		if (node->right != NULL)
			q.push(node->right);
		q.pop();
	}

	return printSeq;
}


//int main()
//{
//	TreeNode* root1 = new TreeNode(0);
//	TreeNode* p1 = root1;
//	bool flag = true;
//	for (int i = 1; i < 10; ++i)
//	{
//		TreeNode* left = new TreeNode(i);
//		TreeNode* right = new TreeNode(i + 1);
//		p1->left = left;
//		p1->right = right;
//		if (flag)
//		{
//			flag = false;
//			p1 = p1->right;
//		}
//		else
//		{
//			flag = true;
//			p1 = p1->left;
//		}
//	}
//	vector<int> v = PrintFromTopToBottom(root1);
//
//	for (auto i : v)
//		cout << i << endl;
//	system("pause");
//	return 0;
//}